package com.wzp.server;

/**
 * @author zhengpeng.wang
 */
public class MergeArray {

    /**
     * 两个有序整数数组 nums1 和 nums2，将 nums2 合并到 nums1 中，使 nums1 成为一个有序数组。
     * 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。假设 nums1 的空间大小等于 m + n，这样它就
     * 有足够的空间保存来自 nums2 的元素。
     * <p>
     * 将两个数组按顺序进行比较，放入新的数组
     * 时间复杂度 : O(n + m)。
     * 空间复杂度 : O(1)。直接对数组nums1 原地修改，不需要额外空间。
     */
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int total = m + n - 1;
        int n1 = m - 1, n2 = n - 1;
        while (n1 >= 0 || n2 >= 0) {
            int curr = 0;
            if (n1 < 0) {
                curr = nums2[n2--];
            } else if (n2 < 0) {
                curr = nums1[n1--];
            } else if (nums1[n] > nums2[n2]) {
                curr = nums1[n1--];
            } else {
                curr = nums2[n2--];
            }
            nums1[total--] = curr;
        }
    }
}
